package com.condominio.servlet.cpr;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.condominio.facade.Facade;
import com.condominio.model.Conta;
import com.condominio.model.Pessoa;

/**
 * Servlet implementation class ContaServlet
 */
public class ContaServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    Facade fachada=Facade.getInstance();   

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session=request.getSession();
    	if(!session.isNew()){
    		if(session.getAttribute("Usuario")==null) {response.sendRedirect("/Condominio");return;}
    	List<Conta> ac=this.listContas();
		session.setAttribute("contas", ac);
		response.sendRedirect("/Condominio/aplicacao/admin/conta.jsp");
		return;}
    	else response.sendRedirect("/Condominio");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session=request.getSession();
		boolean err=false;

		if (!session.isNew()){
			if(session.getAttribute("Usuario")==null)
			{ response.sendRedirect("/Condominio");return;}
			session.setAttribute("erro", err);
			String s=request.getParameter("op");
			char op=s.charAt(0);


			Conta c=new Conta();
			Pessoa p=new Pessoa(); 

			switch(op){
			case 'c':{
				String pessoa= request.getParameter("tipo_conta");
				String ind = "individual";

				if (pessoa.equals(ind)){

					boolean status=Boolean.parseBoolean(request.getParameter("status_conta"));
					String nome=request.getParameter("nome_conta");
					String vencimento=request.getParameter("vencimento_conta");
					double valor=Double.parseDouble(request.getParameter("valor_conta"));
					int ap=Integer.parseInt(request.getParameter("ap_pessoa"));

					SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
					Date data = new Date();

					try {
						data = formatador.parse(vencimento);
					} catch (ParseException e) {
						e.printStackTrace();
					}

					p.setApartamento(ap);
					p = findPessoaByAP(p);
					c.setDataVencimento(data);
					c.setNome(nome);
					c.setStatus(status);
					c.setValor(valor);
					c.setPessoa(p);
					cadastrarConta(c);
					return;
				}
				else{

					boolean status=Boolean.parseBoolean(request.getParameter("status_conta"));
					String nome=request.getParameter("nome_conta");
					String vencimento=request.getParameter("vencimento_conta");
					double valor=Double.parseDouble(request.getParameter("valor_conta"));

					SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
					Date data = new Date();

					try {
						data = formatador.parse(vencimento);
					} catch (ParseException e) {
						e.printStackTrace();
					}

					c.setDataVencimento(data);
					c.setNome(nome);
					c.setStatus(status);
					c.setValor(valor);
					c.setPessoa(p);

					cadastrarConta(c);
					break;
				}

			}

			case 'r':{
				findConta(c);
				break;}
			case 'l':{
				List<Conta> ac=this.listContas();
				request.setAttribute("contas", ac);
				RequestDispatcher view=request.getRequestDispatcher("/Condominio/conta.do");
				view.forward(request,response);
				break;
			}
			case 'u':{atualizarConta(c);break;}
			case 'd':{
				
				int id = Integer.parseInt(request.getParameter("id_conta"));
				c.setId(id);
				Conta ca = findConta(c);
				
				
				excluirConta(ca);
				break;}
			default:{
				List<Conta> ac=this.listContas();
				session.setAttribute("contas", ac);
				response.sendRedirect("/Condominio/aplicacao/admin/conta.jsp");
				//RequestDispatcher view=request.getRequestDispatcher("condominos.jsp");
				//view.forward(request,response);
				return;
			}
			}


			response.sendRedirect("/Condominio/conta.do");
		}

		}
	
	public boolean cadastrarConta(Conta p){
		return fachada.cadastrarConta(p);
	}
	public Conta findConta(Conta p){
		return fachada.findConta(p);

	}
	public Pessoa findPessoaByAP(Pessoa p){
		return fachada.findPessoaByAP(p);		
	}
	public boolean atualizarConta(Conta p){
		return fachada.atualizarConta(p);

	}
	public boolean excluirConta(Conta p){
		return fachada.excluirConta(p);

	}
	private List<Conta> listContas() {
		return fachada.findAllConta();
		
	}
}


